#include <am.h>
#include <klib.h>
#include <klib-macros.h>
#define     __IOM    volatile 

// typedef struct {  /*!< GPIO Structure */
//     __IOM uint32_t PADDIR;
//     __IOM uint32_t PADIN;
//     __IOM uint32_t PADOUT;
//     __IOM uint32_t INTEN;
//     __IOM uint32_t INTTYPE0;
//     __IOM uint32_t INTTYPE1;
//     __IOM uint32_t INTSTATUS;
// } GPIO_TypeDef;



// #define GPIO_BASE (0x13000000)
// #define GPIO      ((GPIO_TypeDef *) GPIO_BASE)
// // #define CTE(h) ({ Context *h(Event, Context *); cte_init(h); })

Context *simple_trap(Event ev, Context *ctx) {
  printf("event %d\n",ev.event);
  
  switch(ev.event) {
    case EVENT_IRQ_TIMER:
      putch('t'); break;
    case EVENT_IRQ_IODEV:
      putch('d'); break;
    case EVENT_YIELD:
      putch('y'); break;
    case EVENT_EX_INT:
      putch('a');break;
    default:
      break;
  }
  return ctx;
}

int main(const char *args) {
  cte_init(simple_trap);
  
  printf("Hello, Rena World @ " __ISA__ "\n");
  printf("  t = timer, d = device, y = yield\n");
  asm volatile("csrsi mstatus, 8");
  asm volatile("csrs mie, %0" : : "r"(1<<11));
  
  printf("*******************************************\n");
  printf("*******************************************\n");
  printf("*******************************************\n");

  

  return 0;
}
